﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BreukTrainer_EE_.Controller
{
    class ActiveUserController
    {
        private List<Leerling> lln;
        private int active;
        private Opdracht opdracht;
        public Opdracht Opdracht {
            get { return opdracht;}
            set { opdracht=value;}
        }
        public List<Leerling> Lln {
            get { return lln; }
            set { lln = value; }
        }
        public int Active {
            get { return active; }
            set { active = value; }
        }
        public ActiveUserController(Opdracht o) {
            active=0;
            opdracht = o;
            this.lln = Accessor.getActiveLeerlingen(o);
        }
        public ActiveUserController(List<Leerling> lln) {
            active = 0;
            this.lln = lln;
        }
        /// <summary>
        /// We hebben altijd een uitvoerende leerling in de lijst
        /// </summary>
        /// <returns>de actieve leerling</returns>
        public Leerling getActiveLeerling() {
            return lln.ElementAt<Leerling>(active);
        }
        /// <summary>
        /// De volgende leerling wordt aangeduid als we niet
        /// aan het einde van de lijst zijn
        /// </summary>
        /// <returns>Als we op het einde van de lijst zijn
        /// wordt er false teruggegeven</returns>
        public bool nextLeerling()
        {
            if (active+1 < lln.Count) {
                active++;
                return true;
            }
            return false;
        }
        /// <summary>
        /// We gebruiken deze functie voor als we bvb willen wete of
        /// we naar de volgende user mogen gaan
        /// MBV LINQ
        /// </summary>
        /// <returns>Of de actieve leerling nog opdrachten te doe heeft</returns>
        public bool hasMoreOpdrachten() {
            return (Accessor.getOpdrachten(getActiveLeerling().LeerlingID).Count()>0);
        }
        public LeerlingOpdracht getNextOpdracht() {
            if (hasMoreOpdrachten()) { 
                return Accessor.getOpdrachten(getActiveLeerling().LeerlingID).ElementAt<LeerlingOpdracht>(0);
            }
            throw new Exception("Geen volgende opdracht");
        }
        /// <summary>
        /// Als we het totaal van de leerlingen nodig hebben
        /// </summary>
        /// <returns>Aantal leerlingen die nog 
        /// opdrachten moeten uitvoeren</returns>
        public int getAantal() {
            return lln.Count();
        }
       /// <summary>
       /// Indien er geen tijdslimiet geset is
       /// moet er toch een tijdslimiet gegeven worden
       /// we nemen 30 seconden per opgave, wat meer dan voldoende is
       /// </summary>
       /// <returns>De tijdslimiet voor de volledige opgave</returns>
        public int genereerTijdslimiet() {
            int tijdslimiet = Accessor.GetCountOpdrachtDetails(this.getNextOpdracht().OpdrachtID);
            tijdslimiet *= 30; //30seconden standaard per oefening
            return tijdslimiet;
        }
    }
}
